#!/bin/bash

# =============================================================================
# School-AIGC 日志管理脚本
# 
# 用途：管理API测试日志文件
# =============================================================================

LOG_DIR="logs"

# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
BLUE='\033[0;34m'
NC='\033[0m'

# 显示使用帮助
show_help() {
    echo -e "${BLUE}School-AIGC 日志管理工具${NC}"
    echo -e "${BLUE}===========================${NC}"
    echo ""
    echo "用法: $0 [命令]"
    echo ""
    echo "可用命令:"
    echo "  list, ls       列出所有日志文件"
    echo "  latest         显示最新日志文件"
    echo "  clean          清理所有日志文件"
    echo "  clean-old      清理7天前的日志文件"
    echo "  size           显示日志目录大小"
    echo "  count          统计日志文件数量"
    echo "  help, -h       显示此帮助信息"
    echo ""
    echo "示例:"
    echo "  $0 list        # 列出所有日志"
    echo "  $0 latest      # 查看最新日志"
    echo "  $0 clean-old   # 清理旧日志"
}

# 列出所有日志文件
list_logs() {
    echo -e "${BLUE}日志文件列表:${NC}"
    echo "================================"
    
    if [ ! -d "$LOG_DIR" ] || [ ! "$(ls -A "$LOG_DIR"/*.log 2>/dev/null)" ]; then
        echo -e "${YELLOW}没有找到日志文件${NC}"
        return
    fi
    
    ls -lah "$LOG_DIR"/*.log | while read -r line; do
        # 提取文件信息
        size=$(echo "$line" | awk '{print $5}')
        date=$(echo "$line" | awk '{print $6, $7, $8}')
        file=$(echo "$line" | awk '{print $9}')
        filename=$(basename "$file")
        
        # 根据文件名判断类型
        if [[ "$filename" == *"fixed"* ]]; then
            echo -e "${GREEN}✓${NC} $filename ${BLUE}($size)${NC} - $date"
        else
            echo -e "${YELLOW}○${NC} $filename ${BLUE}($size)${NC} - $date"
        fi
    done
}

# 显示最新日志
show_latest() {
    echo -e "${BLUE}最新日志文件:${NC}"
    echo "================================"
    
    if [ ! -d "$LOG_DIR" ] || [ ! "$(ls -A "$LOG_DIR"/*.log 2>/dev/null)" ]; then
        echo -e "${YELLOW}没有找到日志文件${NC}"
        return
    fi
    
    latest_log=$(ls -t "$LOG_DIR"/*.log 2>/dev/null | head -1)
    
    if [ -n "$latest_log" ]; then
        echo -e "${GREEN}文件:${NC} $(basename "$latest_log")"
        echo -e "${GREEN}大小:${NC} $(ls -lah "$latest_log" | awk '{print $5}')"
        echo -e "${GREEN}时间:${NC} $(ls -lah "$latest_log" | awk '{print $6, $7, $8}')"
        echo ""
        echo -e "${BLUE}内容预览 (前10行):${NC}"
        echo "--------------------------------"
        head -10 "$latest_log"
        echo "--------------------------------"
        echo -e "${YELLOW}查看完整日志: cat $latest_log${NC}"
    fi
}

# 清理所有日志
clean_all() {
    if [ ! -d "$LOG_DIR" ]; then
        echo -e "${YELLOW}日志目录不存在${NC}"
        return
    fi
    
    log_count=$(ls "$LOG_DIR"/*.log 2>/dev/null | wc -l)
    
    if [ "$log_count" -eq 0 ]; then
        echo -e "${YELLOW}没有日志文件需要清理${NC}"
        return
    fi
    
    echo -e "${YELLOW}警告: 即将删除所有 $log_count 个日志文件${NC}"
    echo -n "确认删除? (y/N): "
    read -r confirm
    
    if [[ "$confirm" =~ ^[Yy]$ ]]; then
        rm -f "$LOG_DIR"/*.log
        echo -e "${GREEN}已清理所有日志文件${NC}"
    else
        echo -e "${BLUE}已取消操作${NC}"
    fi
}

# 清理旧日志 (7天前)
clean_old() {
    if [ ! -d "$LOG_DIR" ]; then
        echo -e "${YELLOW}日志目录不存在${NC}"
        return
    fi
    
    echo -e "${BLUE}清理7天前的日志文件...${NC}"
    
    # 在macOS和Linux上都兼容的方式
    old_files=$(find "$LOG_DIR" -name "*.log" -mtime +7 2>/dev/null)
    
    if [ -z "$old_files" ]; then
        echo -e "${GREEN}没有找到7天前的日志文件${NC}"
        return
    fi
    
    echo "找到的旧日志文件:"
    echo "$old_files" | while read -r file; do
        echo "  - $(basename "$file")"
    done
    
    echo -n "确认删除这些文件? (y/N): "
    read -r confirm
    
    if [[ "$confirm" =~ ^[Yy]$ ]]; then
        echo "$old_files" | xargs rm -f
        echo -e "${GREEN}已清理旧日志文件${NC}"
    else
        echo -e "${BLUE}已取消操作${NC}"
    fi
}

# 显示目录大小
show_size() {
    if [ ! -d "$LOG_DIR" ]; then
        echo -e "${YELLOW}日志目录不存在${NC}"
        return
    fi
    
    echo -e "${BLUE}日志目录统计:${NC}"
    echo "================================"
    
    total_size=$(du -sh "$LOG_DIR" 2>/dev/null | cut -f1)
    file_count=$(ls "$LOG_DIR"/*.log 2>/dev/null | wc -l)
    
    echo -e "${GREEN}目录:${NC} $LOG_DIR/"
    echo -e "${GREEN}总大小:${NC} $total_size"
    echo -e "${GREEN}文件数:${NC} $file_count"
    
    if [ "$file_count" -gt 0 ]; then
        echo ""
        echo -e "${BLUE}各类型文件统计:${NC}"
        fixed_count=$(ls "$LOG_DIR"/*fixed*.log 2>/dev/null | wc -l)
        normal_count=$(ls "$LOG_DIR"/api_test_[0-9]*.log 2>/dev/null | wc -l)
        
        echo -e "  修复版脚本日志: ${GREEN}$fixed_count${NC} 个"
        echo -e "  原版脚本日志:   ${YELLOW}$normal_count${NC} 个"
    fi
}

# 统计文件数量
count_logs() {
    if [ ! -d "$LOG_DIR" ]; then
        echo -e "${YELLOW}日志目录不存在${NC}"
        return
    fi
    
    total=$(ls "$LOG_DIR"/*.log 2>/dev/null | wc -l)
    echo -e "${GREEN}总日志文件数: $total${NC}"
}

# 主程序
main() {
    case "${1:-help}" in
        "list"|"ls")
            list_logs
            ;;
        "latest")
            show_latest
            ;;
        "clean")
            clean_all
            ;;
        "clean-old")
            clean_old
            ;;
        "size")
            show_size
            ;;
        "count")
            count_logs
            ;;
        "help"|"-h"|"")
            show_help
            ;;
        *)
            echo -e "${RED}错误: 未知命令 '$1'${NC}"
            echo ""
            show_help
            exit 1
            ;;
    esac
}

main "$@" 